//
//  Status.swift
//  Weibo007
//
//  Created by 闫崇 on 15/12/20.
//  Copyright © 2015年 闫崇. All rights reserved.
//

import UIKit
//访问微博首页的 URL
private let WB_Home_Timeline_URL = "2/statuses/home_timeline.json"

class Status: NSObject {
    
    // MARK: - 数据模型属性
    /// 微博创建时间
    var created_at: String?
    /// 微博ID
    var id: Int = 0
    /// 微博信息内容
    var text: String?
    /// 微博来源
    var source: String?
    /// 配图数组
    var pic_urls: [[String: String]]?
    //用户模型
    var user : User?
    //类属性数组
    static let properties = ["created_at","id","text","source","pic_urls"]
    
    //字典转模型函数
    init(dict:[String:AnyObject]) {
        super.init()
        //用 key 遍历数组中的属性
        for key in Status.properties {
            //判断字典中对应key 对应的值是否存在  或者 key 值为 user
            if dict[key] == nil || key == "user"{
                continue
            }
            
            //如果存在使用 KVC 设置数值,使用之前需要调用 super.init 初始化对象属性
            setValue(dict[key], forKey: key)
            
        }
        
        //判断模型中是否包含user
        if let userDict = dict["user"] as? [String : AnyObject] {
            user = User(dict: userDict)
            
        }
        
        
    }
    
    //重写输出方法
    override var description : String {
        
        let dict = dictionaryWithValuesForKeys(Status.properties)
        return "\(dict)"
    }
    
    
    
    //加载数据
    class func loadStatus(finished:(statuses:[Status]) ->()) {
        assert(sharedUserAccount != nil ,"必须登录之后才能访问网络")
        //网络访问参数
        let params = ["access_token" : sharedUserAccount!.access_token]
        
        NetworkTool.sharedNetworkTools().GET(WB_Home_Timeline_URL, parameters: params, success: { (_, JSON) -> Void in
            
            //从结果中获取微博的数组
            if let array = JSON!["statuses"] as? [[String:AnyObject]]{
                
                //array 就是拿到的微博数组  直接返回
                finished(statuses: statuses(array))
                
            }
            
            }) { (_, error) -> Void in
                print(error)
        }
        
    }
    
    //使用可变的数组完成网络数组转 status 数组
    private class func statuses(array:[[String:AnyObject]]) ->[Status] {
        //定义可变数组
        var arrayM = [Status]()
        
        //遍历array
        for dict in array {
            arrayM.append(Status(dict: dict))
            
        }
        
        return arrayM
    }
    
    
    

}
